package br.ucb.cesbdao.model.impl;

import java.sql.SQLException;
import java.util.ArrayList;

import lombok.Getter;
import lombok.Setter;

import org.apache.log4j.Logger;

import br.ucb.cesbdao.beans.TipoAtendimento;
import br.ucb.cesbdao.model.TipoAtendimentoModel;
import br.ucb.cesbdao.persistencia.dao.TipoAtendimentoDAO;
import br.ucb.cesbdao.persistencia.factory.FactoryConnection;
import br.ucb.cesbdao.persistencia.factory.FactoryDAO;
import br.ucb.cesbdao.servicos.Servicos;

public class TipoAtendimentoModelImpl implements TipoAtendimentoModel{

	
	private Logger logger = Servicos.carregaLog(TipoAtendimentoModelImpl.class);
	@Getter @Setter
	private TipoAtendimentoDAO dao;
	
	public TipoAtendimentoModelImpl() {
	}

	@Override
	public void addAtendimento(TipoAtendimento atendimento) {
		try{
			setDao(FactoryDAO.getDaoTipoAtendimento(FactoryConnection.getInstance().criaConexao()));
			getDao().addAtendimento(atendimento);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
	}

	@Override
	public void addAtendimento(String descricao) {
		try{
			setDao(FactoryDAO.getDaoTipoAtendimento(FactoryConnection.getInstance().criaConexao()));
			getDao().addAtendimento(descricao);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
	}

	@Override
	public void delAtendimento(int id) {
		try{
			setDao(FactoryDAO.getDaoTipoAtendimento(FactoryConnection.getInstance().criaConexao()));
			getDao().delAtendimento(id);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
	}

	@Override
	public TipoAtendimento getByIdTipoAtendimento(int id) {
		try{
			setDao(FactoryDAO.getDaoTipoAtendimento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getByIdTipoAtendimento(id);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public ArrayList<TipoAtendimento> getAll() {
		try{
			setDao(FactoryDAO.getDaoTipoAtendimento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getAll();
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public ArrayList<TipoAtendimento> getByIdAtendimento(int idAtendimento) {
		try{
			setDao(FactoryDAO.getDaoTipoAtendimento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getByIdAtendimento(idAtendimento);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public ArrayList<TipoAtendimento> getByNotInIdAtendimento(int idAtendimento) {
		try{
			setDao(FactoryDAO.getDaoTipoAtendimento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getByNotInIdAtendimento(idAtendimento);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public void upAtendimento(String descricao, int idTipoAtende) {
		try{
			setDao(FactoryDAO.getDaoTipoAtendimento(FactoryConnection.getInstance().criaConexao()));
			getDao().upAtendimento(descricao, idTipoAtende);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
	}

	@Override
	public ArrayList<TipoAtendimento> getByDescricao(String descricao) {
		try{
			setDao(FactoryDAO.getDaoTipoAtendimento(FactoryConnection.getInstance().criaConexao()));
			return getDao().getByDescricao(descricao);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}
}
